package com.nuoniu.sibanyun.service;

import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService;
import com.nuoniu.sibanyun.entity.SysMenu;
import com.nuoniu.sibanyun.entity.dto.MenuSaveDto;
import com.nuoniu.sibanyun.entity.dto.MenuSearchDto;
import com.nuoniu.sibanyun.entity.vo.AppUserModuleVo;
import com.nuoniu.sibanyun.entity.vo.RouterMenuVo;
import org.apache.ibatis.annotations.Param;

import javax.servlet.http.HttpServletRequest;
import java.util.List;
import java.util.Set;

/**
 * <p>
 * 菜单表 服务类
 * </p>
 *
 * @author baiqiang
 * @since 2020-04-23
 */
public interface ISysMenuService extends IService<SysMenu> {
    /**
     * 通过 userId 查询菜单权限
     * @param userId
     * @return
     */
    List<SysMenu> listByUserId(Long userId);

    /**
     * 保存 菜单信息
     * @param menuSaveDto
     * @return
     */
    SysMenu saveSysMenu(MenuSaveDto menuSaveDto,HttpServletRequest request);

    /**
     * 删除 菜单信息
     * @param id
     * @return
     */
    boolean deleteSysMenu(Long id);

    boolean batchUpdateTreeSorts(List<SysMenu> sysMenuList);
    /**
     *
     * @return
     */
    List<RouterMenuVo> listRouterMenuVoByUserId(HttpServletRequest request);


    List<Long> getMenuIdsByRoleId( Integer id);

    /**
     * 通过userId 查询用户所有权限代码
     * @param userId
     * @return
     */
    String userPermissionString(Long userId);

    /**
     * 获取用户 权限
     * @param userId
     * @return
     */
    Set<String> userPermissionList(Long userId);

    /**
     * 分页 查询 菜单
     * @param menuDto
     * @return
     */
    Page<SysMenu> pageMenus(MenuSearchDto menuDto);

    /**
     * 根据uri获取菜单
     * @author 小啊刚
     * @date 2020/5/22
     */
    SysMenu getByUri(String uri);

    /**
     * 获取权限菜单列表
     * @author 小啊刚
     * @date 2020/5/28
     */
    List<SysMenu> getByRole(Long id);

    /**
     * 获取管理员菜单列表
     * @author 小啊刚
     * @date 2020/6/12
     */
    List<SysMenu> getAdminMenu(Long id);


    List<AppUserModuleVo> getAppUserModuleVoList();

    /**
     * 根据标识获取菜单
     * @author 小啊刚
     * @date 2022-01-08
     */
    SysMenu getByMenuPermission(String permission);
}
